`timescale 1ns / 1ps
/////////////////////////////////////////////////////////////////////////////
////                                                                     ////
//// Instituto Tecnologico de Costa Rica                                 ////
////                                                                     ////
//// Divisor de Frecuencia                                               ////
////                                                                     ////
//// Este archivo es parte del proyecto: Control de luces de semaforo    ////
//// http://repositorio-charmander.googlecode.com/svn/trunk/             ////
////                                                                     ////
//// Descripcion                                                         ////
//// Implementacion de un control de luces de semaforo como un proyecto  ////
//// del curso de Taller de Diseño Logico.                               ////
////                                                                     ////
//// Funcionamiento:                                                     ////
//// - Proporciona una frecuencia de 1 Hz a partir de la frecuencia del  ////
////   clock el cual es de 50 KHz.                                       ////
////                                                                     ////                                    
//// Autores:                                                            ////
//// - Gia Chen, kathya0812@gmail.com                                    ////
////   Edgar Rojas, edtec217@gmail.com                                   ////
////                                                                     ////
/////////////////////////////////////////////////////////////////////////////

module Divider(_clk_i, _sync_rst_i, HzActivado_o);
	//Entradas
	input _clk_i; //Clock del semaforo
	input _sync_rst_i; //Reset del semaforo

	//Salidas
	output reg HzActivado_o;

	reg [25:0] contador;//Contador de 26 bits ya que cuenta hasta 50 000 000.
	reg inicio;//Esta variable se creo por los test bench debido a que tenia que inicializarse las entradas
						//porque se tenia el problema de que se reseteaba todos los valores cada vea que el clock  
					   //hacia una transicion al flanco positivo.
	
	//Cada vez que el clock este en flanco positivo, el dividor de frecuencia comienza
	//a operar.
	always@(posedge _clk_i)

		begin
			if (_sync_rst_i)//Si se hace un reset.
				begin
				contador <= 0;
				HzActivado_o <= 0;
				end
			else if (inicio==1)//Si ya se inicializaron las variables.
				begin
					if (HzActivado_o)//Si HzActivado esta en alto se vuelve a contar.
						begin
						contador <= 0;
						HzActivado_o <= ~ HzActivado_o;
						end
					else if (contador == 50000000)//Si el contador llego a 50000000 se vuelve al inicio.
						begin 
						contador <= 0;
						HzActivado_o <= ~ HzActivado_o;
						end
					else
						begin
						contador <= contador +1;//Aumenta la variable contador en 1 unidad.
						end
				end
			else//Si es la primera vez que ingresa.
				begin
					inicio <= 1;
					contador <=0;
					HzActivado_o <= 0;
				end
		end

endmodule
